/**
 * HttpRequest代理
 * 用于封装发起Http请求时需要的配置与转换
 */

'use strict';

const rp = require('request-promise');
const SUCCESS_CODE = 99999;
const ERROR_CODE = 30000;

const fetch = require('isomorphic-fetch');


/**
 * 打包数据成协议格式
 * @param  {object}  data    将要返回给客户端的数据
 * @param  {Boolean} isError 是否是错误信息
 * @return {object}          协议格式的数据
 */
function dataPack(data, isError) {
	if (!!isError) {
		return {
			error: data ? data.toString() : 'unknown',
			code: ERROR_CODE
		};
	}

	return {
		data,
		code: SUCCESS_CODE
	};
}

/**
 * 发起post请求
 * @param  {object} data  提交给API服务器的数据
 * @return {Promise}      发起请求的Promise对象
 */
function post(url, data) {

	// let options = {
	// 	method: 'POST',
	// 	uri: url,
	// 	body: data,
	// 	json: true
	// };

	// return rp(options)
	// 	.then((json) => {
	// 		if (json.code == SUCCESS_CODE) {
	// 			// 成功
	// 			return json.data;
	// 		} else {
	// 			// 失败
	// 			throw new Error(json.data.message);
	// 		}
	// 	});

	let options = undefined;
	if (data) {
		options = {
			method: 'post',
			headers: {
				'Accept': 'application/json',
				'Content-Type': 'application/json'
			},
			body: JSON.stringify(data)
		}
	}

	return fetch(url, options)
		.then((response) => response.json())
		.then((json) => {
			if (json.code == SUCCESS_CODE)
				return json.data;
			else
				throw new Error(json.data.message);
		});
}

module.exports = {
	dataPack,
	post
};
